package com.hua.util;

import java.security.PublicKey;

/**
 * 类名: CommStringBufferUtil
 * 作者: 蒋剑华
 * 创建时间: 2025/11/7 15:11
 * 类描述：
 */
public enum CommStringBufferUtil {

    INSTANCE;

    //先创建一个StringBuffer对象，给一个初始容量，尽可能大，减少扩容次数\
    //线程安全
    private final StringBuffer stringBuffer = new StringBuffer(100);

    /**
     * StringBuffer拼接
     * str: 可变长度类型，可以传一个或者多个String对象，进行拼接操作
     */
    public String joint(String... str) {
        for (String bean : str) {
            stringBuffer.append(bean);
        }
        return stringBuffer.toString();
    }

    /**
     * StringBuffer插入字符
     * position: 插入的下标位置
     * str：插入的内容
     * 重构支持：String, double, float, char, char[], long, int
     */
    public String insertByIndex(Integer position, String str) {
        return stringBuffer.insert(position, str).toString();
    }

    public String insertByIndex(int position, int str) {
        return stringBuffer.insert(position, str).toString();
    }

    public String insertByIndex(int position, long str) {
        return stringBuffer.insert(position, str).toString();
    }

    public String insertByIndex(int position, double str) {
        return stringBuffer.insert(position, str).toString();
    }

    public String insertByIndex(int position, char str) {
        return stringBuffer.insert(position, str).toString();
    }

    // 8. 插入 char[] 子数组（从偏移量 offset 开始，取 length 个字符）
    public String insertByIndex(Integer position, char[] chars, int offset, int length) {
        return stringBuffer.insert(position, chars, offset, length).toString();
    }

    // （可选）其他需要的类型：float、short、byte 等，按上面的格式添加即可
    public String insertByIndex(int position, float value) {
        return stringBuffer.insert(position, value).toString();
    }

    /**
     * 删除指定区间的字符  注意：左闭右开区间
     */
    public void deleteSection(int startPosition, int endPosition) {
        stringBuffer.delete(startPosition, endPosition);
    }

    /**
     * 删除指定下标的字符
     */
    public void deletePosition(int position) {
        stringBuffer.deleteCharAt(position);
    }

    /**
     * 替换最指定区间的内容
     */
    public String replace(int startPosition, int endPosition, String strContent) {
        return stringBuffer.replace(startPosition, endPosition, strContent).toString();
    }

    /**
     * 反转整个字符
     */
    public String reverse() {
        return stringBuffer.reverse().toString();
    }

    /**
     * 定位字符串首次出现的位置
     * 返回下标
     */
    public int searchFirst(String strContent) {
        return stringBuffer.indexOf(strContent);
    }

    /**
     * 定位字符串最后出现的位置
     * 返回下标
     */
    public int searchLast(String strContent) {
        return stringBuffer.lastIndexOf(strContent);
    }

    /**
     * 修改指定下标的字符
     */
    public void setChar(int position, char carContent) {
        stringBuffer.setCharAt(position, carContent);
    }

    /**
     * 获取对应索引的值
     */
    public char getAarByPosition(int position) {
        return stringBuffer.charAt(position);
    }

    /**
     * 获取当前容量
     */
    public int getCapacity() {
        return stringBuffer.capacity();
    }

    /**
     * 获取当前字符串长度
     */
    public int getLength() {
        return stringBuffer.length();
    }

    /**
     * 获取当前内容
     * */
    public String getToString() {
        return stringBuffer.toString();
    }

}
